package cn.bonoon.controllers.user;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.bonoon.core.plugins.LoginRecordService;
import cn.bonoon.entities.LoginEntity;
import cn.bonoon.kernel.util.StringHelper;
import cn.bonoon.kernel.web.controllers.AbstractController;
import cn.bonoon.util.ClientInfo;

/**
 * <pre>
 * 当前系统的活动用户，注意不是某一个服务器上的session的登录用户
 * 在集群的环境下，可以有多台的服务器同时被启动的
 * 所有的登录用户都应该被记录到数据库，并由一下的策略来判断是否登录超时或退出
 * </pre>
 * 
 * @author jackson
 * 
 */
@Controller
public class ActivityUserController extends AbstractController {

	@Autowired
	private LoginRecordService loginRecordService;

	@RequestMapping("s/sys/activity/users")
	public String get(Model model) {
		model.addAttribute("users", _activityUser(loginRecordService.activities()));
		return "user/user-activity";
	}
	
	private String _activityUser(List<LoginEntity> user_list) {
		StringBuilder users = new StringBuilder();
		users.append("<tr><th style='text-align:center; border-color:#000; width:50px;'>序号</th>");
		users.append("<th style='text-align:center; border-color:#000; width:100px;'>登录名</th>");
		users.append("<th style='text-align:center; border-color:#000; width:150px;'>用户名</th>");
		users.append("<th style='text-align:center; border-color:#000; width:80px;'>ip</th>");
		users.append("<th style='text-align:center; border-color:#000; width:150px;'>登录时间</th>");
		users.append("<th style='text-align:center; border-color:#000; width:120px;'>操作系统</th>");
		users.append("<th style='text-align:center; border-color:#000; width:200px;'>浏览器/版本</th>");
		users.append("<th style='text-align:center; border-color:#000; width:50px;'>操作</th></tr>");
		for (int i = 0; i < user_list.size(); i++) {
			LoginEntity entity = user_list.get(i);
			ClientInfo clientInfo = new ClientInfo(entity.getAdditionalInfo());
			String url = "<a class='cls_logout' href='s/sys/activity/users/logout?id=" + entity.getId() + "'>下线</a>";
			users.append("<tr><td>").append(i + 1).append("</td><td>").append(entity.getLoginName());
			users.append("</td><td>").append(entity.getUserName()).append("</td><td>").append(entity.getLoginIp());
			users.append("</td><td>").append(StringHelper.datetime2String(entity.getLoginAt()));
			users.append("</td><td>").append(clientInfo.getOSName() + "/" + clientInfo.getOSVer());
			users.append("</td><td>").append(clientInfo.getExplorerName() + "/" + clientInfo.getExplorerVer());
			users.append("</td><td>").append(url).append("</td></tr>");
		}
		return users.toString();
	}

//	@ResponseBody
//	@RequestMapping(value = "s/sys/activity/users/logout", method = { RequestMethod.GET, RequestMethod.POST })
//	public final JsonResult logout(HttpServletRequest request, Long id) {
//		String session_id = loginRecordService.getSessionId(id);
//		if (StringHelper.isNotEmpty(session_id)) {
//			BnSessionContext bnsc = BnSessionContext.getInstance();
//			HttpSession session = bnsc.getSession(session_id);
//			session.invalidate();
////			loginRecordService.logout(id);
//		}
//		return JsonResult.result(_activityUser(loginRecordService.activities()));
//	}

//	public class ActivityUser {
//		public ActivityUser(int i, LoginEntity entity) {
//			ordinal = i;
//			loginName = entity.getLoginName();
//			name = entity.getUserName();
//			ip = entity.getLoginIp();
//			loginAt = StringHelper.datetime2String(entity.getLoginAt());
//			ClientInfo clientInfo = new ClientInfo(entity.getAdditionalInfo());
//			browserName = clientInfo.getExplorerName() + "/" + clientInfo.getExplorerVer();
//			systemName = clientInfo.getOSName() + "/" + clientInfo.getOSVer();
//			operation = "<a class='cls_logout' href='s/sys/activity/users/logout?id=" + entity.getId() + "'>下线</a>";
//		}
//
//		private int ordinal;
//		private String loginName;
//		private String name;
//		private String ip;
//		private String loginAt;
//		private String systemName;
//		private String browserName;
//		private String operation;
//
//		public final int getOrdinal() {
//			return ordinal;
//		}
//
//		public final void setOrdinal(int ordinal) {
//			this.ordinal = ordinal;
//		}
//
//		public final String getLoginName() {
//			return loginName;
//		}
//
//		public final void setLoginName(String loginName) {
//			this.loginName = loginName;
//		}
//
//		public void setIp(String ip) {
//			this.ip = ip;
//		}
//
//		public String getIp() {
//			return ip;
//		}
//
//		public void setName(String name) {
//			this.name = name;
//		}
//
//		public String getName() {
//			return name;
//		}
//
//		public String getLoginAt() {
//			return loginAt;
//		}
//
//		public void setLoginAt(String loginAt) {
//			this.loginAt = loginAt;
//		}
//
//		public String getBrowserName() {
//			return browserName;
//		}
//
//		public void setBrowserName(String browserName) {
//			this.browserName = browserName;
//		}
//
//		public String getSystemName() {
//			return systemName;
//		}
//
//		public void setSystemName(String systemName) {
//			this.systemName = systemName;
//		}
//
//		public String getOperation() {
//			return operation;
//		}
//
//		public void setOperation(String operation) {
//			this.operation = operation;
//		}
//	}
}
